package domain;

// Generated 08-ene-2009 0:57:32 by Hibernate Tools 3.2.2.GA

import static javax.persistence.GenerationType.IDENTITY;

import java.util.Date;
import java.util.HashSet;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinColumns;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.PrePersist;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;

/**
 * Restaurante generated by hbm2java
 */
@Entity
@Table(name = "restaurante", catalog = "irestaurant")
@Name("restaurant")
@Scope(ScopeType.CONVERSATION)
public class Restaurante implements java.io.Serializable {

	private Integer restaurante;
	private Localizacion localizacion;
	private Municipio municipio;
	private Categoria categoria;
	private String nombre;
	private String telefono;
	private String email;
	private boolean revisado;
	private Date fechaAlta;
	private boolean permiteFumadores;
	private Set<Mesa> mesas = new HashSet<Mesa>(0);
	private Set<Reserva> reservas = new HashSet<Reserva>(0);
	private Set<Foto> fotos = new HashSet<Foto>(0);
	private boolean denegado;

	public Restaurante() {
		municipio = new Municipio();
		municipio.setProvincia(new Provincia());
	}

	public Restaurante(Localizacion localizacion, Municipio municipio,
			String nombre, String telefono, String email, boolean revisado,
			Date fechaAlta, boolean permiteFumadores) {
		this.localizacion = localizacion;
		this.municipio = municipio;
		this.nombre = nombre;
		this.telefono = telefono;
		this.email = email;
		this.revisado = revisado;
		this.fechaAlta = fechaAlta;
		this.permiteFumadores = permiteFumadores;
	}

	public Restaurante(Categoria categoria, String nombre, String telefono,
			String email, boolean revisado, Date fechaAlta,
			boolean permiteFumadores, Set<Mesa> mesas, Set<Reserva> reservas,
			Set<Foto> fotos) {
		this.categoria = categoria;
		this.nombre = nombre;
		this.telefono = telefono;
		this.email = email;
		this.revisado = revisado;
		this.fechaAlta = fechaAlta;
		this.permiteFumadores = permiteFumadores;
		this.mesas = mesas;
		this.reservas = reservas;
		this.fotos = fotos;
	}

	@Id
	@GeneratedValue(strategy = IDENTITY)
	@Column(name = "restaurante", unique = true, nullable = false)
	public Integer getRestaurante() {
		return this.restaurante;
	}

	public void setRestaurante(Integer restaurante) {
		this.restaurante = restaurante;
	}

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "localizacion")
	public Localizacion getLocalizacion() {
		return this.localizacion;
	}

	public void setLocalizacion(Localizacion localizacion) {
		this.localizacion = localizacion;
	}

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumns({
			@JoinColumn(name = "municipio", referencedColumnName = "municipio", nullable = false),
			@JoinColumn(name = "provincia", referencedColumnName = "provincia", nullable = false)})
	public Municipio getMunicipio() {
		return this.municipio;
	}

	public void setMunicipio(Municipio municipio) {
		this.municipio = municipio;
	}

	@ManyToOne(fetch = FetchType.EAGER)
	@JoinColumn(name = "categoria")
	public Categoria getCategoria() {
		return this.categoria;
	}

	public void setCategoria(Categoria categoria) {
		this.categoria = categoria;
	}

	@Column(name = "nombre", nullable = false, length = 60)
	public String getNombre() {
		return this.nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	@Column(name = "telefono", nullable = false, length = 15)
	public String getTelefono() {
		return this.telefono;
	}

	public void setTelefono(String telefono) {
		this.telefono = telefono;
	}

	@Column(name = "email", nullable = false, length = 45)
	public String getEmail() {
		return this.email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	@Column(name = "revisado", nullable = false)
	public boolean isRevisado() {
		return this.revisado;
	}

	public void setRevisado(boolean revisado) {
		this.revisado = revisado;
	}

	@Temporal(TemporalType.TIMESTAMP)
	@Column(name = "fecha_alta", nullable = false, length = 0)
	public Date getFechaAlta() {
		return this.fechaAlta;
	}

	public void setFechaAlta(Date fechaAlta) {
		this.fechaAlta = fechaAlta;
	}

	@Column(name = "permiteFumadores", nullable = false)
	public boolean isPermiteFumadores() {
		return this.permiteFumadores;
	}

	public void setPermiteFumadores(boolean permiteFumadores) {
		this.permiteFumadores = permiteFumadores;
	}

	@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "restaurante")
	public Set<Mesa> getMesas() {
		return this.mesas;
	}

	public void setMesas(Set<Mesa> mesas) {
		this.mesas = mesas;
	}

	@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "restaurante")
	public Set<Reserva> getReservas() {
		return this.reservas;
	}

	public void setReservas(Set<Reserva> reservas) {
		this.reservas = reservas;
	}

	@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "restaurante")
	public Set<Foto> getFotos() {
		return this.fotos;
	}

	public void setFotos(Set<Foto> fotos) {
		this.fotos = fotos;
	}

	@PrePersist
	public void prePersist() {
		this.setFechaAlta(new Date());
	}

	@Column(name = "denegado", nullable = false)
	public boolean isDenegado() {
		return denegado;
	}

	public void setDenegado(boolean denegado) {
		this.denegado = denegado;
	}

}
